from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC        # 显示等待方式，找不到抛出异常
from selenium.webdriver.support.ui import WebDriverWait     #  显示等待，传入实例驱动
import time


# 实例化驱动
driver = webdriver.Chrome()
# 打开网页
driver.get('https://www.baidu.com/')

# 最大化
driver.maximize_window()

# 隐式等待
# driver.implicitly_wait(15)

# 最小化
# driver.minimize_window()
# 输入文本内容
# driver.find_element(By.ID,'chat-textarea').send_keys('刘超班长')
WebDriverWait(driver,10,0.5).until(EC.presence_of_element_located((By.ID,'chat-textarea'))).send_keys("刘超班长")
"""
WebDriverWait(driver,10,0.5):  
第1个参数：驱动
第2个参数：总的等待时间
第3个参数：轮询的频率
"""

# 点击搜索按钮
# driver.find_element(By.ID,'chat-submit-button').click()
WebDriverWait(driver,10,0.5).until(EC.presence_of_element_located((By.ID,'chat-submit-button'))).click()


# time.sleep(5)
# 点击第一个链接
# driver.find_element(By.XPATH,'//*[@id="2"]/div/div/h3/a').click()
WebDriverWait(driver,10,0.5).until(EC.presence_of_element_located((By.XPATH,'//*[@id="2"]/div/div/h3/a'))).click()

# 切换句柄
win = driver.window_handles
driver.switch_to.window(win[-1])

# 断言当前页面，是否进入正确，看文章内容
text = WebDriverWait(driver,10,0.5).until(EC.presence_of_element_located((By.CLASS_NAME,'lemmaTitle_mNKG_'))).text
assert text == '刘超'

# 点击：文章中的东北野战军链接
WebDriverWait(driver,10,0.5).until(EC.presence_of_all_elements_located((By.CLASS_NAME,'innerLink_dFNtB')))[0].click()

# 等待
time.sleep(5)
"""
强制等待：time.sleep()，代码执行到此，强制等待几秒
        等待一个弹窗弹出：需要用到

隐式等待：implicitly_wait(15)，全局等待时间。如果元素找到了就执行，在规定的时间15s内没找到，则抛出异常
        优点：全局等待时间
        缺点：它会把页面全部的元素都加载出来，再去做操作，可能会浪费一些时间

显示等待：Webdriverwait，给定时间秒数，和轮询频率，每隔一段时间会寻找一 遍，找到就执行操作
        优点：不会浪费时间，找到就执行
        缺点：代码太长了
"""







